package com.yunmai.library.util;

import android.content.Context;
import android.support.annotation.PluralsRes;
import android.support.annotation.StringRes;
import android.widget.Toast;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * StringUtils
 * <p>
 * owen Xie
 * <p>
 * 2015-2-5 下午10:52:14
 */
public class StringUtils {
  private static final String TAG = StringUtils.class.getSimpleName();
  static final String brtext = "\n";

  //public static String defaultIfEmpty(String obj, String defValue) {
  //    if (obj == null) {
  //        obj = "";
  //    }
  //    return StringUtils.defaultIfEmpty(obj, defValue);
  //}

  public static String defIfEmpty(Object obj, String defValue) {
    if (obj == null) {
      obj = "";
    }
    String str = obj.toString();
    return isNull(obj.toString()) ? defValue : str;
  }

  /**
   * MAC 地址转换成IOS MAC地址
   *
   * @return String
   */
  public static String macNoToDevceNo(String macNo) {
    if (isNull(macNo)) {
      return "";
    }
    String value = "";
    StringBuffer sb = null;
    if (macNo.contains(":")) {
      String[] arr = macNo.split(":");
      int len = arr.length - 1;
      sb = new StringBuffer();
      for (int i = len; i >= 0; i--) {
        sb.append(arr[i]);
      }
    }
    if (sb != null && sb.length() > 0) {
      value = String.valueOf(Long.parseLong(sb.toString(), 16));
    }
    return value;
  }

  /**
   * 获取资源字符串
   *
   * @param stringRes 资源字符串id
   * @return 资源字符串
   */
  public static String getString(@StringRes int stringRes, Context context) {
    return context.getResources().getString(stringRes);
  }

  /**
   * 获取带参数的资源字符串
   *
   * @param stringRes 资源字符串id
   * @param args 参数
   * @return 带参数的资源字符串
   */
  public static String getString(@StringRes int stringRes, Context context, Object... args) {
    return context.getResources().getString(stringRes, args);
  }

  /**
   * 获取复数资源字符串
   *
   * @param pluralRes 复数资源id
   * @param quantity 数量
   * @return 复数资源字符串
   */
  public static String getQuantityString(@PluralsRes int pluralRes,
      Context context, int quantity) {

    return context.getResources().getQuantityString(pluralRes,
        quantity);
  }

  /**
   * 获取带参数的复数资源字符串
   *
   * @param pluralRes 复数资源id
   * @param quantity 数量
   * @param args 参数
   * @return 带参数的复数资源字符串
   */
  public static String getQuantityString(@PluralsRes int pluralRes,
      Context context,
      int quantity,
      Object... args) {

    return context.getResources().getQuantityString(pluralRes,
        quantity,
        args);
  }

  /**
   * 获取文字的长度，中文+2，英文加+
   *
   * @return int
   */
  public static int getTextLength(String result) {
    int valueLength = 0;
    String chinese = "[\u0391-\uFFE5]";
    /* 获取字段值的长度，如果含中文字符，则每个中文字符长度为2，否则为1 */
    for (int i = 0; i < result.length(); i++) { // 获取一个字符

      String temp = result.substring(i, i + 1); // 判断是否为中文字符

      if (temp.matches(chinese)) { // 中文字符长度为2

        valueLength += 2;
      } else { // 其他字符长度为1
        valueLength += 1;
      }
    }
    return valueLength;
  }

  /**
   * 获取文字的长度，中文+2，英文加+
   *
   * @return int
   */
  public static int getTextIndex(String result, int length) {
    int index = 0;
    int valueLength = 0;
    String chinese = "[\u0391-\uFFE5]";
    for (int i = 0; i < result.length(); i++) { //获取字段值的长度，
      // 如果含中文字符，则每个中文字符长度为2，否则为1
      // 获取一个字符
      String temp = result.substring(i, i + 1); // 判断是否为中文字符

      if (temp.matches(chinese)) { // 中文字符长度为2
        valueLength += 2;
      } else {  // 其他字符长度为1
        valueLength += 1;
      }
      if (valueLength > length) {
        return index;
      }
      index++;
    }
    return index;
  }

  /**
   * 判断字符串是否包含Emoji表情
   *
   * @return boolean
   */
  public static boolean hasEmoji(String str) {
    Pattern emoji = Pattern.compile(
        "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
        Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
    Matcher emojiMatcher = emoji.matcher(str);
    return emojiMatcher.find();
  }

  /**
   * 移除str中的表情符号，将结果返回
   */
  public static String removeEmojiInString(String str) {
    Pattern emoji = Pattern.compile(
        "[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
        Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);
    Matcher emojiMatcher = emoji.matcher(str);
    return emojiMatcher.replaceAll("");
  }

  public static String clearBrText(String shortDesc) {
    if (shortDesc != null) {
      int index = shortDesc.indexOf("\n");
      if (index != -1) {
        return shortDesc.replace(StringUtils.brtext, "");
      }
    }
    return shortDesc;
  }

  public static String replaceBrText(String shortDesc) {
    if (shortDesc != null) {
      int index = shortDesc.indexOf("\n");
      if (index != -1) {
        return shortDesc.replace(StringUtils.brtext, "<br>");
      }
    }
    return shortDesc;
  }

  public static boolean isNumeric(String str) {
    Pattern pattern = Pattern.compile("[0-9]*");
    return pattern.matcher(str).matches();
  }

  public static String substring(String str, int start, int end) {
    if (str == null) {
      return null;
    } else {
      if (end < 0) {
        end += str.length();
      }

      if (start < 0) {
        start += str.length();
      }

      if (end > str.length()) {
        end = str.length();
      }

      if (start > end) {
        return "";
      } else {
        if (start < 0) {
          start = 0;
        }

        if (end < 0) {
          end = 0;
        }

        return str.substring(start, end);
      }
    }
  }

  public static String substring(String str, int start) {
    if (str == null) {
      return null;
    } else {
      if (start < 0) {
        start += str.length();
      }

      if (start < 0) {
        start = 0;
      }

      return start > str.length() ? "" : str.substring(start);
    }
  }

  //public static float floatValue(String obj, float defValue) {
  //    return Float.valueOf(StringUtils.defaultIfEmpty(obj, String.valueOf(defValue)));
  //}
  //
  //public static int intValue(String obj, Integer defValue) {
  //    return Integer.valueOf(StringUtils.defaultIfEmpty(obj, String.valueOf(defValue)));
  //}
  //
  //public static long longValue(String obj, String defValue) {
  //    return Long.valueOf(StringUtils.defaultIfEmpty(obj, defValue));
  //}
  //
  //public static short shortValue(String obj, short defValue) {
  //    try {
  //        return Short.valueOf(StringUtils.defaultIfEmpty(obj, defValue + ""));
  //    } catch (Exception e) {
  //    }
  //    return defValue;
  //}

  public static boolean isNull(String value) {
    if (value == null || "null".equals(value) || value.length() < 1 || "NULL".equals(value)) {
      return true;
    }
    return false;
  }

  public static boolean isNotNull(String value) {
    return !isNull(value);
  }

  /**
   * 国际版接口中添加了字段
   * lang：语言
   * （1：中文  2：英语   3：繁体  4 ：韩语  5：日语 6：俄罗斯 7：西班牙）
   * 其他语言通通默认2 英语
   *
   * @return int
   */
  public static int getLanguageCode() {
    try {
      String languagecode = Locale.getDefault().getLanguage();
      String countrycode = Locale.getDefault().getCountry();
      if (languagecode == null) return 2;
      if (languagecode.equals("en")) {
        return 2;
      } else if (languagecode.equals("zh")) {
        if (countrycode == null) return 2;

        if (countrycode.toLowerCase().equals("cn")) {
          return 1;
        } else if (countrycode.toLowerCase().equals("tw") || countrycode.toLowerCase()
            .equals("hk")) {
          return 3;
        }
      } else if (languagecode.equals("ko")) {
        return 4;
      } else if (languagecode.equals("ja")) {
        return 5;
      } else if (languagecode.equals("ru")) {
        return 6;
      }  /*else if (languagecode.equals("es")) {
        return 7;
      }*/
    } catch (Exception e) {
      e.printStackTrace();
    }
    return 2;
  }
}
